Memahami Data dengan Script Python#
Data understanding adalah tahap awal dalam analisis sains data di mana analis mengumpulkan, menjelajahi, dan menganalisis data untuk memahami bentuk, isi, dan kualitasnya, serta mengidentifikasi masalah seperti nilai yang hilang atau inkonsisten. Tujuan utamanya adalah untuk mendapatkan pemahaman mendalam tentang data agar dapat menyelaraskan data dengan tujuan bisnis dan memilih algoritma yang tepat untuk tahap pemodelan selanjutnya. Tahapan Utama dalam Data Understanding
Mengumpulkan Data Awal: Mengidentifikasi dan mengumpulkan data yang relevan untuk tujuan proyek, baik dari sumber internal perusahaan maupun eksternal.
Menjelajahi Data: Melakukan eksplorasi data untuk mendapatkan wawasan awal, memahami struktur, fitur, dan properti data. Ini melibatkan penggunaan statistik sederhana seperti rata-rata dan visualisasi data.
Memverifikasi Kualitas Data: Memeriksa data untuk mengidentifikasi potensi masalah seperti:
Nilai yang hilang: Mencari data yang tidak lengkap dan memahami alasannya.
Inkonsistensi atau nilai tidak valid: Mengidentifikasi data yang tidak sesuai atau salah.
Outlier: Mendeteksi nilai-nilai ekstrem yang menyimpang dari pola umum.
Membuat database MySQL#
Membuat database MySQL menggunakan phpmyadmin dari XAMPP sebagai tempat untuk menyimpan data iris dengan kolom : id, class, sepal_length, dan sepal_width
Langkah-langkah membuat database MySQL#
Kunjungi laman admin MySQL (localhost/phpmyadmin/)
Buat database baru
import dataset iris ke dalam database, setelah data dimasukkan scroll ke bawah kemudian klik impor
Membuat database PostgreSQL#
Membuat database PostgreSQL menggunakan pgAdmin4 dari postgresql.org sebagai tempat untuk menyimpan data iris dengan kolom : id, class, sepal_length, dan sepal_width
Langkah-langkah membuat database PostgreSQL#
Download pdAdmin4 di postgresql.org/download, pilih intaslller yang sesuai dengan sistem operasi masing-masing dan intall setelah di download
Buka pgAdmin4 yang telah di install, tambahkan tabel baru menggunakan Query Tool
Masukkan query utnuk membuat tabel baru
CREATE TABLE iris (
id SERIAL PRIMARY KEY,
class VARCHAR(50),
petal_length NUMERIC(3,1),
petal_width NUMERIC(3,1)
);
Import dataset ke dalam tabel
Pilih file dataset iris yang akan dimasukkan kedalam database, jika sudah sesuai klik Ok
Berikut data yang telah berhasil di import
Menarik Data ke Power BI#
Langkah-langkah menarik data MySQL#
Install library yang digunakan untuk mengquery data dari Mysql yang di antaranya Pandas, pymysql, dan sqlalchemy pada environment PC/Laptop. pandas biasanya digunakan untuk mengolah dan menyajikan data dalam bentuk dataframe yang akan diperlukan oleh Power BI, pymysql merupakan driver khusus database MySQL yang digunakan untuk berkomunikasi dengan database, sedangkan sqlalchemy merupakan ibarat sebuah jembatan untuk koneksi database.
Massuk ke Power BI, pilih Get Data pada menu Home untuk mendapatkan data
Pada menu Get Data pilih Other -> Pyhton Script, kemudian klik Connect
Masukkan script python untuk mengambil data iris yang ada di database MySQL. berikut script nya :
import pandas as pd
from sqlalchemy import create_engine
# Koneksi ke MySQL
MYSQL_HOST = "localhost"
MYSQL_PORT = 3306
MYSQL_USER = "root"
MYSQL_PASSWORD = ""
MYSQL_DATABASE = "iris"
# Gunakan SQLAlchemy untuk koneksi ke MySQL
mysql_engine = create_engine(
f"mysql+pymysql://{MYSQL_USER}:{MYSQL_PASSWORD}@{MYSQL_HOST}:{MYSQL_PORT}/{MYSQL_DATABASE}"
)
# Jalankan query
mysql_query = "SELECT * FROM iris;"
df_mysql = pd.read_sql(mysql_query, mysql_engine)
# Print hasil
print("Data dari MySQL:")
print(df_mysql.head())
---------------------------------------------------------------------------
OSError Traceback (most recent call last)
/usr/local/lib/python3.12/dist-packages/pymysql/connections.py in connect(self, sock)
660 try:
--> 661 sock = socket.create_connection(
662 (self.host, self.port), self.connect_timeout, **kwargs
/usr/lib/python3.12/socket.py in create_connection(address, timeout, source_address, all_errors)
864 if not all_errors:
--> 865 raise exceptions[0]
866 raise ExceptionGroup("create_connection failed", exceptions)
/usr/lib/python3.12/socket.py in create_connection(address, timeout, source_address, all_errors)
849 sock.bind(source_address)
--> 850 sock.connect(sa)
851 # Break explicitly a reference cycle
OSError: [Errno 99] Cannot assign requested address
During handling of the above exception, another exception occurred:
OperationalError Traceback (most recent call last)
/usr/local/lib/python3.12/dist-packages/sqlalchemy/engine/base.py in __init__(self, engine, connection, _has_events, _allow_revalidate, _allow_autobegin)
142 try:
--> 143 self._dbapi_connection = engine.raw_connection()
144 except dialect.loaded_dbapi.Error as err:
/usr/local/lib/python3.12/dist-packages/sqlalchemy/engine/base.py in raw_connection(self)
3300 """
-> 3301 return self.pool.connect()
3302
/usr/local/lib/python3.12/dist-packages/sqlalchemy/pool/base.py in connect(self)
446 """
--> 447 return _ConnectionFairy._checkout(self)
448
/usr/local/lib/python3.12/dist-packages/sqlalchemy/pool/base.py in _checkout(cls, pool, threadconns, fairy)
1263 if not fairy:
-> 1264 fairy = _ConnectionRecord.checkout(pool)
1265
/usr/local/lib/python3.12/dist-packages/sqlalchemy/pool/base.py in checkout(cls, pool)
710 else:
--> 711 rec = pool._do_get()
712
/usr/local/lib/python3.12/dist-packages/sqlalchemy/pool/impl.py in _do_get(self)
176 except:
--> 177 with util.safe_reraise():
178 self._dec_overflow()
/usr/local/lib/python3.12/dist-packages/sqlalchemy/util/langhelpers.py in __exit__(self, type_, value, traceback)
223 self._exc_info = None # remove potential circular references
--> 224 raise exc_value.with_traceback(exc_tb)
225 else:
/usr/local/lib/python3.12/dist-packages/sqlalchemy/pool/impl.py in _do_get(self)
174 try:
--> 175 return self._create_connection()
176 except:
/usr/local/lib/python3.12/dist-packages/sqlalchemy/pool/base.py in _create_connection(self)
387
--> 388 return _ConnectionRecord(self)
389
/usr/local/lib/python3.12/dist-packages/sqlalchemy/pool/base.py in __init__(self, pool, connect)
672 if connect:
--> 673 self.__connect()
674 self.finalize_callback = deque()
/usr/local/lib/python3.12/dist-packages/sqlalchemy/pool/base.py in __connect(self)
898 except BaseException as e:
--> 899 with util.safe_reraise():
900 pool.logger.debug("Error on connect(): %s", e)
/usr/local/lib/python3.12/dist-packages/sqlalchemy/util/langhelpers.py in __exit__(self, type_, value, traceback)
223 self._exc_info = None # remove potential circular references
--> 224 raise exc_value.with_traceback(exc_tb)
225 else:
/usr/local/lib/python3.12/dist-packages/sqlalchemy/pool/base.py in __connect(self)
894 self.starttime = time.time()
--> 895 self.dbapi_connection = connection = pool._invoke_creator(self)
896 pool.logger.debug("Created new connection %r", connection)
/usr/local/lib/python3.12/dist-packages/sqlalchemy/engine/create.py in connect(connection_record)
660
--> 661 return dialect.connect(*cargs, **cparams)
662
/usr/local/lib/python3.12/dist-packages/sqlalchemy/engine/default.py in connect(self, *cargs, **cparams)
628 # inherits the docstring from interfaces.Dialect.connect
--> 629 return self.loaded_dbapi.connect(*cargs, **cparams) # type: ignore[no-any-return] # NOQA: E501
630
/usr/local/lib/python3.12/dist-packages/pymysql/connections.py in __init__(self, user, password, host, database, unix_socket, port, charset, collation, sql_mode, read_default_file, conv, use_unicode, client_flag, cursorclass, init_command, connect_timeout, read_default_group, autocommit, local_infile, max_allowed_packet, defer_connect, auth_plugin_map, read_timeout, write_timeout, bind_address, binary_prefix, program_name, server_public_key, ssl, ssl_ca, ssl_cert, ssl_disabled, ssl_key, ssl_key_password, ssl_verify_cert, ssl_verify_identity, compress, named_pipe, passwd, db)
364 else:
--> 365 self.connect()
366
/usr/local/lib/python3.12/dist-packages/pymysql/connections.py in connect(self, sock)
722 print(exc.traceback)
--> 723 raise exc
724
OperationalError: (2003, "Can't connect to MySQL server on 'localhost' ([Errno 99] Cannot assign requested address)")
The above exception was the direct cause of the following exception:
OperationalError Traceback (most recent call last)
/tmp/ipython-input-2522821660.py in <cell line: 0>()
16 # Jalankan query
17 mysql_query = "SELECT * FROM iris;"
---> 18 df_mysql = pd.read_sql(mysql_query, mysql_engine)
19
20 # Print hasil
/usr/local/lib/python3.12/dist-packages/pandas/io/sql.py in read_sql(sql, con, index_col, coerce_float, params, parse_dates, columns, chunksize, dtype_backend, dtype)
702 assert dtype_backend is not lib.no_default
703
--> 704 with pandasSQL_builder(con) as pandas_sql:
705 if isinstance(pandas_sql, SQLiteDatabase):
706 return pandas_sql.read_query(
/usr/local/lib/python3.12/dist-packages/pandas/io/sql.py in pandasSQL_builder(con, schema, need_transaction)
904
905 if sqlalchemy is not None and isinstance(con, (str, sqlalchemy.engine.Connectable)):
--> 906 return SQLDatabase(con, schema, need_transaction)
907
908 adbc = import_optional_dependency("adbc_driver_manager.dbapi", errors="ignore")
/usr/local/lib/python3.12/dist-packages/pandas/io/sql.py in __init__(self, con, schema, need_transaction)
1634 self.exit_stack.callback(con.dispose)
1635 if isinstance(con, Engine):
-> 1636 con = self.exit_stack.enter_context(con.connect())
1637 if need_transaction and not con.in_transaction():
1638 self.exit_stack.enter_context(con.begin())
/usr/local/lib/python3.12/dist-packages/sqlalchemy/engine/base.py in connect(self)
3275 """
3276
-> 3277 return self._connection_cls(self)
3278
3279 def raw_connection(self) -> PoolProxiedConnection:
/usr/local/lib/python3.12/dist-packages/sqlalchemy/engine/base.py in __init__(self, engine, connection, _has_events, _allow_revalidate, _allow_autobegin)
143 self._dbapi_connection = engine.raw_connection()
144 except dialect.loaded_dbapi.Error as err:
--> 145 Connection._handle_dbapi_exception_noconnection(
146 err, dialect, engine
147 )
/usr/local/lib/python3.12/dist-packages/sqlalchemy/engine/base.py in _handle_dbapi_exception_noconnection(cls, e, dialect, engine, is_disconnect, invalidate_pool_on_disconnect, is_pre_ping)
2438 elif should_wrap:
2439 assert sqlalchemy_exception is not None
-> 2440 raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
2441 else:
2442 assert exc_info[1] is not None
/usr/local/lib/python3.12/dist-packages/sqlalchemy/engine/base.py in __init__(self, engine, connection, _has_events, _allow_revalidate, _allow_autobegin)
141 if connection is None:
142 try:
--> 143 self._dbapi_connection = engine.raw_connection()
144 except dialect.loaded_dbapi.Error as err:
145 Connection._handle_dbapi_exception_noconnection(
/usr/local/lib/python3.12/dist-packages/sqlalchemy/engine/base.py in raw_connection(self)
3299
3300 """
-> 3301 return self.pool.connect()
3302
3303
/usr/local/lib/python3.12/dist-packages/sqlalchemy/pool/base.py in connect(self)
445
446 """
--> 447 return _ConnectionFairy._checkout(self)
448
449 def _return_conn(self, record: ConnectionPoolEntry) -> None:
/usr/local/lib/python3.12/dist-packages/sqlalchemy/pool/base.py in _checkout(cls, pool, threadconns, fairy)
1262 ) -> _ConnectionFairy:
1263 if not fairy:
-> 1264 fairy = _ConnectionRecord.checkout(pool)
1265
1266 if threadconns is not None:
/usr/local/lib/python3.12/dist-packages/sqlalchemy/pool/base.py in checkout(cls, pool)
709 rec = cast(_ConnectionRecord, pool._do_get())
710 else:
--> 711 rec = pool._do_get()
712
713 try:
/usr/local/lib/python3.12/dist-packages/sqlalchemy/pool/impl.py in _do_get(self)
175 return self._create_connection()
176 except:
--> 177 with util.safe_reraise():
178 self._dec_overflow()
179 raise
/usr/local/lib/python3.12/dist-packages/sqlalchemy/util/langhelpers.py in __exit__(self, type_, value, traceback)
222 assert exc_value is not None
223 self._exc_info = None # remove potential circular references
--> 224 raise exc_value.with_traceback(exc_tb)
225 else:
226 self._exc_info = None # remove potential circular references
/usr/local/lib/python3.12/dist-packages/sqlalchemy/pool/impl.py in _do_get(self)
173 if self._inc_overflow():
174 try:
--> 175 return self._create_connection()
176 except:
177 with util.safe_reraise():
/usr/local/lib/python3.12/dist-packages/sqlalchemy/pool/base.py in _create_connection(self)
386 """Called by subclasses to create a new ConnectionRecord."""
387
--> 388 return _ConnectionRecord(self)
389
390 def _invalidate(
/usr/local/lib/python3.12/dist-packages/sqlalchemy/pool/base.py in __init__(self, pool, connect)
671 self.__pool = pool
672 if connect:
--> 673 self.__connect()
674 self.finalize_callback = deque()
675
/usr/local/lib/python3.12/dist-packages/sqlalchemy/pool/base.py in __connect(self)
897 self.fresh = True
898 except BaseException as e:
--> 899 with util.safe_reraise():
900 pool.logger.debug("Error on connect(): %s", e)
901 else:
/usr/local/lib/python3.12/dist-packages/sqlalchemy/util/langhelpers.py in __exit__(self, type_, value, traceback)
222 assert exc_value is not None
223 self._exc_info = None # remove potential circular references
--> 224 raise exc_value.with_traceback(exc_tb)
225 else:
226 self._exc_info = None # remove potential circular references
/usr/local/lib/python3.12/dist-packages/sqlalchemy/pool/base.py in __connect(self)
893 try:
894 self.starttime = time.time()
--> 895 self.dbapi_connection = connection = pool._invoke_creator(self)
896 pool.logger.debug("Created new connection %r", connection)
897 self.fresh = True
/usr/local/lib/python3.12/dist-packages/sqlalchemy/engine/create.py in connect(connection_record)
659 return connection
660
--> 661 return dialect.connect(*cargs, **cparams)
662
663 creator = pop_kwarg("creator", connect)
/usr/local/lib/python3.12/dist-packages/sqlalchemy/engine/default.py in connect(self, *cargs, **cparams)
627 def connect(self, *cargs: Any, **cparams: Any) -> DBAPIConnection:
628 # inherits the docstring from interfaces.Dialect.connect
--> 629 return self.loaded_dbapi.connect(*cargs, **cparams) # type: ignore[no-any-return] # NOQA: E501
630
631 def create_connect_args(self, url: URL) -> ConnectArgsType:
/usr/local/lib/python3.12/dist-packages/pymysql/connections.py in __init__(self, user, password, host, database, unix_socket, port, charset, collation, sql_mode, read_default_file, conv, use_unicode, client_flag, cursorclass, init_command, connect_timeout, read_default_group, autocommit, local_infile, max_allowed_packet, defer_connect, auth_plugin_map, read_timeout, write_timeout, bind_address, binary_prefix, program_name, server_public_key, ssl, ssl_ca, ssl_cert, ssl_disabled, ssl_key, ssl_key_password, ssl_verify_cert, ssl_verify_identity, compress, named_pipe, passwd, db)
363 self._sock = None
364 else:
--> 365 self.connect()
366
367 def __enter__(self):
/usr/local/lib/python3.12/dist-packages/pymysql/connections.py in connect(self, sock)
721 if DEBUG:
722 print(exc.traceback)
--> 723 raise exc
724
725 # If e is neither DatabaseError or IOError, It's a bug.
OperationalError: (pymysql.err.OperationalError) (2003, "Can't connect to MySQL server on 'localhost' ([Errno 99] Cannot assign requested address)")
(Background on this error at: https://sqlalche.me/e/20/e3q8)
Apabila koneksi berhasil, pilih tabel atau data yang akan di tarik dan pilih “Load” untuk menarik data.
Langkah-langkah menarik data PostgreSQL#
Install library yang digunakan untuk mengquery data dari postgre yang di antaranya Pandas, psycopg2-binary, dan sqlalchemy pada environment PC/Laptop. pandas biasanya digunakan untuk mengolah dan menyajikan data dalam bentuk dataframe yang akan diperlukan oleh Power BI, psycopg2-binary merupakan driver khusus database Postgre yang digunakan untuk berkomunikasi dengan database, sedangkan sqlalchemy merupakan ibarat sebuah jembatan untuk koneksi database.
Massuk ke Power BI, pilih Get Data pada menu Home untuk mendapatkan data
Pada menu Get Data pilih Other -> Pyhton Script, kemudian klik Connect
Masukkan script python untuk mengambil data iris yang ada di database PostgreSQL. berikut script nya :
import pandas as pd
from sqlalchemy import create_engine
# Koneksi ke PostgreSQL
PG_HOST = "localhost"
PG_PORT = 5432
PG_USER = "postgres"
PG_PASSWORD = "psd"
PG_DATABASE = "postgres"
# Gunakan SQLAlchemy untuk koneksi ke PostgreSQL
pg_engine = create_engine(
f"postgresql+psycopg2://{PG_USER}:{PG_PASSWORD}@{PG_HOST}:{PG_PORT}/{PG_DATABASE}"
)
# Jalankan query
pg_query = "SELECT * FROM iris;"
df_postgres = pd.read_sql(pg_query, pg_engine)
# Print hasil
print("\nData dari PostgreSQL:")
print(df_postgres.head())
Apabila koneksi berhasil, pilih tabel atau data yang akan di tarik dan pilih “Load” untuk menarik data.
Menggabuangkan Data di Power BI Menggunakan Transform Data#
Langkah-langkah menggabungkan data#
Pada menu Home pilih Transform Data
Setelah itu pada menu home sebelah kanan pilih Combine -> Merge Queries -> Merge Queries as New
Pilih tabel yang akan digabungkan dengan memilih tabel pada dropdown.
Pilih kolom yang akan digabungkan, pada dataset iris data memiliki id yang sama disebabkan jumlah data yang sama, sehingga untuk menggabungkannya cukup menggunakan inner join, konsep inner join akan menggabungkan data yang memiliki id yang sama. Setelah memilih kolom klik Ok untuk melanjutkan proses.
Kemudian akan muncul tabel hasil penggabungan, pada kolom yang digabungkan klik tanda panah untuk menyeleksi kolom apa saja yang akan digabungkan.
Setelah kolom berhasil digabung klik Close & Apply di pojok kiri atas
Mendeteksi Outlier#
Langkah-langkah mendeteksi outlier menggunakan library pycaret#
Install library Pycaret ke environment Python di PC/Laptop.
Pada Power BI ketika kita menggunakan script Python yang akan diterapkan pada suatu tabel seringkali mendapatkan suatu masalah pembatasan. Oleh karena itu solusinya kita menonaktifkannya pada menu File -> Options and Settings -> Option -> Privacy dan pilih Always ignore Privacy Level Settings.
Pada Power BI, pergi ke Menu Home -> Transform Data -> Transform -> Script Python di pojok kanan atas.
Masukkan Script Python yang digunakan untuk mendeteksi Outlier data.
import pandas as pd
from pycaret.anomaly import setup, create_model, assign_model
#mengambil data berbasis dataframe
data = dataset.copy()
process = setup(data, session_id=123)
#memilih model outlier
model = create_model('iforest')
#hasil
result = assign_model(model)
result
Penjelasan code:
Pertama kita import librray yang dibutuhkan seperti pandas dan pycaret.
Kemudian Load dataset menggunakan libray pandas dengan method copy().
lalu gunakan built in function setup untuk memulai proses.
Pilih model yang digunakan untuk mendeteksi outlier, pada code tersebut menggunakan model iforest.
tampilkan hasil menggunakan fungsi assign_model.
Load hasil
Setelah berhasil meload script, akan muncul tabel yang berisi data di antaranya data, dataset, dan result. Kemudian pilih result dan klik tulisan Table untuk melihat oulier yang telah diproses.
Untuk data yang outlier direpresentasikan dengan nilai 1 dan 0 untuk data yang bukan oulier.
Berdasarkan gambar di atas terlihat bahwa jumlah outlier ditemukan pada data adalah 8 data.
Mencari Missing Value#
Langkah-langkah mencari missing value#
Install library yang dibutuhkan untuk mencari missing value seperti pandas.
Buka Power BI, kemudian pergi ke menu Home -> Transform Data -> Transform -> Run Python Script disebalah kanan atas.
Kemudian Buat scipt Python untuk mendeteksi Missing Value.
import pandas as pd
# load data
data = dataset.copy()
# cari missing value
loss = data.isnull().sum()
# hasil
result = pd.DataFrame({
'Column': loss.index,
'MissingCount': loss.values
})
result
Penjelasan Code:
import library yang digunakan misalnya pandas.
Kemudian load data menggunkan metod copy()
Setelah itu, untuk mencari data missing dapat menggunakan method isnull() dan sum() untuk menjumlahkan total missingnya.
Simpan Hasil dalam variabel yang berupa dataframe yang berisi indeks dari nilai missing dan nilai data atau veluenya.
Ketika sudah muncul hasil script Python, pilih data result dan klik Table untuk melihat hasil dari pencarian missing valuenya.
hasil dari pencarian missing value pada data Iris.
Berdasarkan gambar tersebut dapat disimpulkan bahwa setiap fitur tidak memiliki missing value.
Mendeteksi Outlier Menggunakan Model ABOD#
Tahapan-tahapann deteksi outlier#
Buka Power BI, kemudian pergi ke menu Home -> Transform Data -> Transform -> Run Python Script disebalah kanan atas.
Masukkan Script Python yang digunakan untuk mendeteksi outlier data.
import pandas as pd
from pycaret.anomaly import *
data = dataset.copy()
process = setup(data, session_id=123)
model = create_model('abod')
result = assign_model(model)
data_anomaly = result[result['Anomaly']==1]
data_anomaly
Penjelasan code:
import pandas as pd: Mengimpor library pandas yang digunakan untuk mengelola data dalam format tabel (DataFrame).
from pycaret.anomaly import : Mengimpor semua fungsi dari modul anomaly dalam library PyCaret, yang khusus digunakan untuk deteksi anomali.
data = dataset.copy(): Membuat salinan (copy) dari dataset asli ke variabel baru bernama data. Ini dilakukan agar dataset asli tidak berubah selama proses.
process = setup(data, session_id=123): Menyiapkan lingkungan PyCaret. Fungsi setup melakukan pra-pemrosesan data secara otomatis, seperti normalisasi dan penanganan nilai kosong. session_id digunakan agar hasil eksperimen dapat direproduksi.
model = create_model(‘abod’): Melatih model deteksi anomali. ‘abod’ adalah singkatan dari Angle-Based Outlier Detection, salah satu algoritma yang digunakan untuk menemukan titik data yang “aneh”.
result = assign_model(model): Menerapkan model yang sudah dilatih ke data. Fungsi ini menambahkan dua kolom baru: Anomaly (yang berisi 1 jika anomali dan 0 jika bukan) dan Anomaly_Score (skor anomali).
data_anomaly = result[result[‘Anomaly’]==1]: Menyaring (memfilter) result DataFrame. Kode ini hanya mengambil baris-baris di mana nilai pada kolom Anomaly sama dengan 1, yaitu baris yang dianggap sebagai anomali.
data_anomaly: Menampilkan DataFrame baru yang hanya berisi baris-baris data anomali.
Terdapat 4 tabel yang dihasilkan dari python script tadi, dari tabel tersebut pilih tabel data_anomaly untuk melihat outlier dari data iris
Berikut isi tabel data_anomaly
Berdasarkan gambar di atas terlihat bahwa jumlah outlier ditemukan pada data adalah 8 data.
Mendeteksi Outlier Menggunakan Model KNN#
Tahapan-tahapann deteksi outlier#
Buka Power BI, kemudian pergi ke menu Home -> Transform Data -> Transform -> Run Python Script disebalah kanan atas.
Masukkan Script Python yang digunakan untuk mendeteksi outlier data.
import pandas as pd
from pycaret.anomaly import *
data = dataset.copy()
process = setup(data, session_id=123)
model = create_model('knn')
result = assign_model(model)
data_anomaly = result[result['Anomaly']==1]
data_anomaly
Penjelasan code:
import pandas as pd: Mengimpor library pandas yang digunakan untuk mengelola data dalam format tabel (DataFrame).
from pycaret.anomaly import : Mengimpor semua fungsi dari modul anomaly dalam library PyCaret, yang khusus digunakan untuk deteksi anomali.
data = dataset.copy(): Membuat salinan (copy) dari dataset asli ke variabel baru bernama data. Ini dilakukan agar dataset asli tidak berubah selama proses.
process = setup(data, session_id=123): Menyiapkan lingkungan PyCaret. Fungsi setup melakukan pra-pemrosesan data secara otomatis, seperti normalisasi dan penanganan nilai kosong. session_id digunakan agar hasil eksperimen dapat direproduksi.
model = create_model(‘knn’): Melatih model deteksi anomali. ‘knn’ adalah singkatan dari k-Nearest Neighbors, salah satu algoritma yang umum digunakan untuk mengidentifikasi anomali dengan melihat jarak terdekat antar titik data.
result = assign_model(model): Menerapkan model yang sudah dilatih ke data. Fungsi ini menambahkan dua kolom baru: Anomaly (yang berisi 1 jika anomali dan 0 jika bukan) dan Anomaly_Score (skor anomali).
data_anomaly = result[result[‘Anomaly’]==1]: Menyaring (memfilter) result DataFrame. Kode ini hanya mengambil baris-baris di mana nilai pada kolom Anomaly sama dengan 1, yaitu baris yang dianggap sebagai anomali.
data_anomaly: Menampilkan DataFrame baru yang hanya berisi baris-baris data anomali.
Terdapat 4 tabel yang dihasilkan dari python script tadi, dari tabel tersebut pilih tabel data_anomaly untuk melihat outlier dari data iris
Berikut isi tabel data_anomaly
Berdasarkan gambar di atas terlihat bahwa jumlah outlier ditemukan pada data adalah 8 data.
Mendeteksi Outlier Menggunakan Model LOF#
Tahapan-tahapann deteksi outlier#
Buka Power BI, kemudian pergi ke menu Home -> Transform Data -> Transform -> Run Python Script disebalah kanan atas.
Masukkan Script Python yang digunakan untuk mendeteksi outlier data.
import pandas as pd
from pycaret.anomaly import *
data = dataset.copy()
process = setup(data, session_id=123)
model = create_model('lof')
result = assign_model(model)
data_anomaly = result[result['Anomaly']==1]
data_anomaly
Penjelasan code:
import pandas as pd: Mengimpor library pandas yang digunakan untuk mengelola data dalam format tabel (DataFrame).
from pycaret.anomaly import : Mengimpor semua fungsi dari modul anomaly dalam library PyCaret, yang khusus digunakan untuk deteksi anomali.
data = dataset.copy(): Membuat salinan (copy) dari dataset asli ke variabel baru bernama data. Ini dilakukan agar dataset asli tidak berubah selama proses.
process = setup(data, session_id=123): Menyiapkan lingkungan PyCaret. Fungsi setup melakukan pra-pemrosesan data secara otomatis, seperti normalisasi dan penanganan nilai kosong. session_id digunakan agar hasil eksperimen dapat direproduksi.
model = create_model(‘lof’): Melatih model deteksi anomali menggunakan algoritma Local Outlier Factor (LOF). Algoritma ini mengukur seberapa terisolasi suatu titik data dari lingkungannya..
result = assign_model(model): Menerapkan model yang sudah dilatih ke data. Fungsi ini menambahkan dua kolom baru: Anomaly (yang berisi 1 jika anomali dan 0 jika bukan) dan Anomaly_Score (skor anomali).
data_anomaly = result[result[‘Anomaly’]==1]: Menyaring (memfilter) result DataFrame. Kode ini hanya mengambil baris-baris di mana nilai pada kolom Anomaly sama dengan 1, yaitu baris yang dianggap sebagai anomali.
data_anomaly: Menampilkan DataFrame baru yang hanya berisi baris-baris data anomali.
Terdapat 4 tabel yang dihasilkan dari python script tadi, dari tabel tersebut pilih tabel data_anomaly untuk melihat outlier dari data iris
Berikut isi tabel data_anomaly
Berdasarkan gambar di atas terlihat bahwa jumlah outlier ditemukan pada data adalah 8 data.